// 使用数据拦截器
import axios from 'axios';
import Qs from 'qs';
import { Message } from 'element-ui';
axios.defaults.timeout = 5000;

// env_config
// dev  开发环境
// test  测试环境
// build  线上环境
var urlObj = {
    dev: 'http://localhost:3000/',
    test: 'http://localhost:8081/',
    build: 'https://www.17npw.net/api/'
}
console.log(urlObj);
// Message('这是一条消息提示');
axios.defaults.baseURL = urlObj.dev; //填写域名

//http request 拦截器  客户端给服务端 的数据 
axios.interceptors.request.use(
    config => {

        config.headers.common = {
            'X-API-TOKEN': localStorage.getItem('token'),
            'version': '1.0',
            'Content-Type': 'application/json;charset=UTF-8'
        }
        console.log('begin');

        if (config.data.form) {
            //转化成formData格式
            // transformRequest只能用在 PUT, POST, PATCH 这几个请求方法
            config.transformRequest = [function(data) {
                //方式一
                delete data.form;
                // var ret = '';
                // for (let it in data) {
                //   ret += it+'=' +data[it] + '&';
                // }
                // return ret.substring(0,ret.length-1);

                //方式二：
                var test2 = Qs.stringify(data);
                return test2;
            }]
        }

        return config;
    },
    error => {
        return Promise.reject(err);
    }
);

//响应拦截器即异常处理 -  -- 服务给客户端的数据进行处理
axios.interceptors.response.use(
    response => {
        if (response.status === 200) {
            return Promise.resolve(response);
        } else {
            return Promise.reject(response);
        }
        // return response
    },
    error => {
        if (error && error.response.status) {
            var errorMsg = '';
            switch (error.response.status) {
                case 400:
                    console.log('错误请求')
                    errorMsg = '错误请求';
                    break;
                case 401:
                    console.log('未授权，请重新登录');
                    errorMsg = '未授权，请重新登录';
                    break;
                case 403:
                    console.log('拒绝访问')
                    errorMsg = '拒绝访问';
                    break;
                case 404:
                    console.log('请求错误,未找到该资源')
                    errorMsg = '请求错误,未找到该资源';
                    break;
                case 405:
                    console.log('请求方法未允许')
                    errorMsg = '请求方法未允许';
                    break;
                case 408:
                    console.log('请求超时')
                    errorMsg = '请求超时';
                    break;
                case 500:
                    console.log('服务器端出错')
                    errorMsg = '服务器端出错';
                    break;
                case 501:
                    console.log('网络未实现')
                    errorMsg = '请求方法未允许';
                    break;
                case 502:
                    console.log('网络错误')
                    errorMsg = '网络错误';
                    break;
                case 503:
                    console.log('服务不可用')
                    errorMsg = '服务不可用';
                    break;
                case 504:
                    console.log('网络超时')
                    errorMsg = '网络超时';
                    break;
                case 505:
                    console.log('http版本不支持该请求')
                    errorMsg = 'http版本不支持该请求';
                    break;
                default:
                    console.log(`连接错误${error.response.status}`)
            }

            Message({
                message: errorMsg,
                type: 'warning'
            });

        } else {
            console.log('连接到服务器失败')
        }
        return Promise.resolve(error.response)
    })

export default {

    //方式四：
    async post(url, params) {
        var res = await axios({
            method: 'post',
            url: url,
            data: params
        });
        return res.data;

    },

    /**
     * 封装patch请求
     * @param url
     * @param data
     * @returns {Promise}
     */

    patch(url, data = {}) {
        return new Promise((resolve, reject) => {
            axios.patch(url, data)
                .then(response => {
                    resolve(response.data);
                })
        })
    },

    get(url, params = {}) {
        return new Promise((resolve, reject) => {
            axios.get(url, {
                    params: params
                })
                .then(response => {
                    resolve(response.data);
                })
        })
    },


}